﻿/* Copyright (c) Microsoft Corporation
 * 
 * All rights reserved.
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.  You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0
 * 
 * THIS CODE IS PROVIDED *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, MERCHANTABLITY OR NON-INFRINGEMENT.
 * 
 * See the Apache Version 2.0 License for specific language governing permissions and limitations under the License.
*/

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ProximityTapper
{
    public class MessageStringData : IMessageData
    {
        /// <summary>
        /// Class holding message data as byte array
        /// </summary>
        public string MessageString { get; private set; }

        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="messageString">String containing message data</param>
        public MessageStringData(string messageString)
        {
            this.MessageString = String.Copy(messageString);
        }

        /// <summary>
        /// Store byte array containing message data as a string. This would 
        /// try to determine if encoding is Unicode or UTF8 and 
        /// use it for conversion from byte array to string. 
        /// </summary>
        /// <param name="messageData"></param>
        /// <returns>true if successful, false otherwise</returns>
        bool IMessageData.TryParse(byte[] messageData)
        {
            if (messageData.Length % 2 == 0
                    && messageData.Length > 2
                    && messageData[1] == 0)
            {
                this.MessageString = String.Copy(System.Text.Encoding.Unicode.GetString(messageData));
            }
            else
            {
                this.MessageString = String.Copy(System.Text.Encoding.UTF8.GetString(messageData));
            }

            return true;
        }

        /// <summary>
        /// Return message data string
        /// </summary>
        /// <returns></returns>
        public override string ToString()
        {
            return MessageString;
        }
    }
}
